<?php
/**********************地图工具******************************/
/**
 * 求两个已知经纬度之间的距离,单位为米
 *
 * @param lng1 $ ,lng2 经度
 * @param lat1 $ ,lat2 纬度
 * @return float 距离，单位米
 * @author www.Alixixi.com
 */
function getLocationLength($lng1, $lat1, $lng2, $lat2)
{
    // 将角度转为狐度
    $radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度
    $radLat2 = deg2rad($lat2);
    $radLng1 = deg2rad($lng1);
    $radLng2 = deg2rad($lng2);
    $a = $radLat1 - $radLat2;
    $b = $radLng1 - $radLng2;
    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * EARTH_RADIUS * 1000;
    return $s;
}

/**
 * [vicinity description]
 * @Description 判断附近的位置点
 * @Author      FengPQ
 * @DateTime    2020-07-27T22:51:05+0800
 * @param       [type]                   $lng      [description]
 * @param       [type]                   $lat      [description]
 * @param       float                    $distance [description]
 * @return      [type]                             [description]
 */
function vicinity($lng, $lat, $distance = 0.5)
{
    //$distance = 0.5;      // 单位 10KM
    $radius = EARTH_RADIUS;

    $dlng = rad2deg(2 * asin(sin($distance / (2 * $radius)) / cos($lat)));
    $dlat = rad2deg($distance * 10 / $radius);

    $lng_left = round($lng - $dlng, 6);
    $lng_right = round($lng + $dlng, 6);
    $lat_top = round($lat + $dlat, 6);
    $lat_bottom = round($lat - $dlat, 6);

    return array('lng' => array('left' => $lng_left, 'right' => $lng_right), 'lat' => array('top' => $lat_top, 'bottom' => $lat_bottom));
}
